
a32_svc_entry:
	MRC p15,0,r0,c12,c0,1
	sub r0, r0, #1

	ldr r0, =a32_mon_entry
	// msr esr, r0
	// mcr vbar_mon, r0
	mov r0, #0x90000000
	MCR p15,0,r0,c12,c0,0
	// mov r14_mon, r0
	// smc #0
	eret

a32_mon_entry:
	b a32_mon_entry


_print:
	// # vmrs r0, fpexc
	// # # adr r0, #4
	// # mov r0, pc
	// # blx r0
	// # ldr r0, =0x70000000
	// # ldr r0, =0x13000000

	// mrs r0, spsr_fiq
	// msr spsr_fiq, r0
	// mrs r0, spsr_mon
	// msr spsr_mon, r0
	// ldr r0, =0x80000000
	// ldr r0, [r0]
	// mov r0, #0x03d6 // a32-mon
	// mov r0, #0x03d6
	// mcr r0, spsr_svc
	// mrc P15,1,r2,c9,c0,2
	// mrs r0, S1_1_C9_C0_2
	// hvc #0
 //    ldr r0, =_print
 //    mov lr, r0
 //    // smc 0
	// mov r0, #0x01da // a32-hyp
	// msr spsr, r0
	// eret

	// mov r0, #0x01d6  // a32-super SPSR_svc
	// msr spsr_svc, r0
	// mov r0, pc
	// add r0, r0, #0x10
	// mov lr, #0x0
	// // svc 0
	// smc 0
	// // msr cpsr, r0
	// // mrs r0, cpsr
	// eret
	smc 0
	mov r0, pc
	ldr r1, =.
	ldr r1, =_print

	ldr r0, =UART_ADDR
	mov r1, #'a'
	strb r1, [r0]
	b _print


// # .macro uart_out count,ch
// #     // ldr x0, =0x70000000
// #     // ldr x0, =0x13000000
// #     ldr x0, =UART_ADDR
// #     mov x2, \count
// #     mov x1, \ch
// #     strb w1, [x0]
// #     sub x2, x2, #1
// #     cmp x2, #0
// #     b.ne #-0xc
// # .endm

// # _print:
// # 	uart_out 1, 'T'
// # 	b _print